package com.tistory.commons.utils;

public class NameCutUtil {
    
    
    /** 
     * 
     * 해당 문자열에 size 에 해당하는 자리마다 공백 추가
     * 
     * 예) str 값이 abcdefghijklmnopqr 일때
     * 
     *     nameSpace(str, 7);
     *     
     *     결과 : abcdef ghijklm nopqr
     * 
     * @param str
     * @param size
     * @return
     * 
     */
    public static String nameSpace(String str, int size)
    {
        if (str == null) return "";
        
        int iTempLen =  str.getBytes().length;
        String tmp = "";
        
        if(iTempLen > size){
            
            int iStrLen  = str.length();
            int slen = 0, blen = 0;
            char c;
            
            while (slen+1 <= iStrLen){
                
                c = str.charAt(slen);
                slen++;
                blen++;
                if (c > 127) blen++;
                
                if (blen <= size){
                    tmp = tmp + c;
                } else {
                    tmp = tmp + " " + c;

                    blen = 1;
                    if (c > 127) blen++;
                }
            }
        } else {
            tmp = str;
        }

        return tmp;
    }
    
    /** 
     * 
     * 해당 문자열에 size 에 해당하는 자리마다 <br/> 추가
     * 
     * 예) str 값이 abcdefghijklmnopqr 일때
     * 
     *     nameSpace(str, 7);
     *     
     *     결과 : abcdef<br/>ghijklm<br/>nopqr
     * 
     * @param str
     * @param size
     * @return
     * 
     */
    public static String nameBr(String str, int size)
    {
        if (str == null) return "";
        
        int iTempLen =  str.getBytes().length;
        String tmp = "";
        
        if(iTempLen > size){
            
            int iStrLen  = str.length();
            int slen = 0, blen = 0;
            char c;
            
            while (slen+1 <= iStrLen){
                
                c = str.charAt(slen);
                slen++;
                blen++;
                if (c > 127) blen++;
                
                if (blen <= size){
                    tmp = tmp + c;
                } else {
                    tmp = tmp + "<br/>" + c;

                    blen = 1;
                    if (c > 127) blen++;
                }
            }
        } else {
            tmp = str;
        }

        return tmp;
    }    
    
    /**
     * 
     * 해당 문자열에 size 에 해당하는 첫번째 줄에는 공백을 추가
     * 두번째 줄에는 size 길이 -3 자리이후 ... 추가
     * 
     * 예) str 값이 abcdefghijklmnopqr 일때
     * 
     *     nameSpace(str, 7);
     *     
     *     결과 : abcdef ghij...
     * 
     * @param str
     * @param size
     * @return
     * 
     */
    public static String nameSpaceLoss(String str, int size)
    {
        if (str == null) return "";
        
        int iTempLen =  str.getBytes().length;

        String tmp = "";
        
        if(iTempLen > size){
            
            int iStrLen  = str.length();
            int slen = 0, blen = 0;
            char c;
            
            // 말줄임표가 필요한 경우 조건.
            int checkSize = (size * 2); 
            int blankCheck = 0;
            while (slen+1 <= iStrLen){

                c = str.charAt(slen);
                slen++;
                blen++;
                
                if (c > 127) blen++;

                if (checkSize > iTempLen){
                    if (blen <= size){
                        tmp = tmp + c;    
                    } else {
                        tmp = tmp + " " + c;
    
                        blen = 1;
                        if (c > 127) blen++;
                    }
                } else {
                    if (blen <= size){
                        tmp = tmp + c;

                        // 공백 추가후 두번째줄 길이에 -3에 해당하는 부분에 ... 처리
                        if ((blankCheck == 1) && (blen >= (size -3))){
                            tmp = tmp + "...";
                            break;
                        }
                    } else {
                        tmp = tmp + " " + c;
                        blen = 1;
                        if (c > 127) blen++;
                        
                        blankCheck++;
                    }
                }
            }
        } else {
            tmp = str;
        }

        return tmp;
    }    
    
    /**
     * 
     * 해당 문자열에 size 에 해당하는 첫번째 줄에는 공백을 추가
     * 두번째 줄에는 size 길이 -3 자리이후 ... 추가
     * 
     * 예) str 값이 abcdefghijklmnopqr 일때
     * 
     *     nameSpace(str, 7);
     *     
     *     결과 : abcdef<br/>ghij...
     * 
     * @param str
     * @param size
     * @return
     * 
     */
    public static String nameBrLoss(String str, int size)
    {
        if (str == null) return "";
        
        int iTempLen =  str.getBytes().length;

        String tmp = "";
        
        if(iTempLen > size){
            
            int iStrLen  = str.length();
            int slen = 0, blen = 0;
            char c;
            
            // 말줄임표가 필요한 경우 조건.
            int checkSize = (size * 2); 
            int blankCheck = 0;
            while (slen+1 <= iStrLen){

                c = str.charAt(slen);
                slen++;
                blen++;
                
                if (c > 127) blen++;

                if (checkSize > iTempLen){
                    if (blen <= size){
                        tmp = tmp + c;    
                    } else {
                        tmp = tmp + " " + c;
    
                        blen = 1;
                        if (c > 127) blen++;
                    }
                } else {
                    if (blen <= size){
                        tmp = tmp + c;

                        // 공백 추가후 두번째줄 길이에 -3에 해당하는 부분에 ... 처리
                        if ((blankCheck == 1) && (blen >= (size -3))){
                            tmp = tmp + "...";
                            break;
                        }
                    } else {
                        tmp = tmp + " " + c;
                        blen = 1;
                        if (c > 127) blen++;
                        
                        blankCheck++;
                    }
                }
            }
        } else {
            tmp = str;
        }

        return tmp;
    }        
}
